package com.ehome.manage.module.utils.process.process;

import lombok.extern.slf4j.Slf4j;
import com.ehome.manage.module.utils.process.context.BaseProcessContext;
import com.ehome.manage.module.utils.process.node.ProcessNode;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 流程定义抽象类
 *
 * @author xiaxinye
 */
@Slf4j
public abstract class BaseProcessDefinition<C extends BaseProcessContext> implements ProcessDefinition<C> {

    /**
     * 流程节点
     */
    protected Map<String, ProcessNode<C>> nodeMap = new HashMap<>();

    /**
     * 构造器
     *
     * @param processNodes 流程节点实例列表(由Spring注入)
     */
    protected BaseProcessDefinition(List<ProcessNode<C>> processNodes) {
        for (ProcessNode<C> node : processNodes) {
            nodeMap.put(node.getName(), node);
        }
    }

    @Override
    public ProcessNode<C> getNodeByName(String nodeName) {
        return nodeMap.get(nodeName);
    }

    /**
     * 是否启用当前流程的节点日志
     * 默认开启节点日志，可覆盖此方法以开关节点日志
     *
     * @return true: 启用 | false: 关闭
     */
    @Override
    public boolean nodeLogEnabled() {
        return true;
    }

}
